package com.lx.lxsql.entity;

import java.util.HashMap;
import java.util.Map;

public enum SIType {
        /** 普通文本  字符串  符号*/
        WORD("word"), STRING("string"), SYMBOL("symbol")
        /** 关键字 */
        ,CREATE("create"),TABLE("table"),ALTER("alter"),DROP("drop"),SELECT("select"),DELETE("delete"),UPDATE("update")
        ,NOT("not"),NULL("null"),DEFAULT("default"),COMMENT("comment"),PRIMARY("primary"),KEY("key"),INDEX("index")
        /** */
        ,INT("int"),DECIMAL("decimal"),VARCHAR("varchar"),CHAR("char"),DATE("date"),DATETIME("datetime")
        /** 特殊符号 */
        ,GT(">"),LT("<"),AS("="),EQ("=="),GE(">="),LE("<="),ADD("+"),SUB("-"),MUL("*"),DIV("/")
        /** 界限符号*/
        ,LP("("),RP(")"),LBT("["),RBT("]"),LBS("{"),RBS("}"),COM(","),COL(":"),SEM(";")
        /** 是数字 */
        ,ISLONG("isLong"),ISDECIMAL("isDecimal")
        ;
        //说明: 类型相同
        /**{ ylx } 2021/9/20 11:41 */
        public boolean isType(StatementInformation sif){
            return sif != null && this == sif.getSiType();
        }

        private String type;
        SIType(String type){
            this.type = type;
        }

        private static final Map<String, SIType> TYPE_MAP = new HashMap<>();
        static {
            for (SIType type : values()) {
                TYPE_MAP.put(type.type, type);
            }
        }
        public static SIType getWordType(String str){
            str = str.toLowerCase();
            if (TYPE_MAP.containsKey(str)){
                return TYPE_MAP.get(str);
            }
            if (str.matches("-?\\d+")){
                return ISLONG;
            }else if (str.matches("-?\\d+.\\d+")){
                return ISDECIMAL;
            }
            return WORD;
        }
        public static SIType getSymbolType(String str){
            str = str.toLowerCase();
            if (TYPE_MAP.containsKey(str)){
                return TYPE_MAP.get(str);
            }
            return SYMBOL;
        }
    }
